//package work.rightAnswer;
//
//
//
//
//import com.sun.corba.se.impl.orbutil.graph.Graph;
//import com.sun.javafx.geom.Edge;
//
//import java.util.HashMap;
//import java.util.HashSet;
//import java.util.LinkedList;
//import java.util.Queue;
//
//class Solution_207 {
//    public boolean canFinish(int numCourses, int[][] prerequisites) {
//        Graph graph = createGraph(prerequisites);
//        //0入度的节点队列
//        Queue<Node> queue = new LinkedList<>();
//        for (Node node : graph.nodes.values()) {
//            if(node.in==0){
//                queue.offer(node);
//            }
//        }
//        while (!queue.isEmpty()){
//            Node poll = queue.poll();
//            numCourses--;
//            graph.nodes.remove(poll.value);
//            for (Node next : poll.nexts) {
//                next.in--;
//                if(next.in==0){
//                    queue.offer(next);
//                }
//            }
//        }
//
//        return graph.nodes.isEmpty()?true:false;
//    }
//
//    private Graph createGraph(int[][] prerequisites) {
//        Graph graph = new Graph();
//        HashMap<Integer, Node> nodes = graph.nodes;
//        HashSet<Edge> edges = graph.edges;
//        for (int[] prerequisite : prerequisites) {
//            int to = prerequisite[0];
//            int from = prerequisite[1];
//            if(!nodes.containsKey(from)){
//                nodes.put(from,new Node(from));
//            }
//            if(!nodes.containsKey(to)){
//                nodes.put(to,new Node(to));
//            }
//            Edge edge = new Edge(0,nodes.get(from),nodes.get(to));
//            edges.add(edge);
//            Node fnode = nodes.get(from);
//            Node tnode = nodes.get(to);
//            fnode.nexts.add(tnode);
//            fnode.out++;
//            tnode.in++;
//        }
//        return graph;
//    }
//}